Traditional software diagnostic tools, such as debuggers, profilers, and memory diagnostic tools, typically operate on a live, running process or a saved, heavyweight process state, such as a process dump file or historical trace. Live processes provide little or no historical context about how a process reached its current state. Process dump files, while verbose, are extremely heavyweight and time consuming to create and analyze.
Most current state-of-the-art techniques for diagnosing logic problems in applications that are running in a production environment use either trace statements or dynamic tracing. For example, trace statements, such as print debugging, monitor print statements that indicate the flow of execution of a process. Dynamic tracing, such as Microsoft Intellitrace®, gathers data in real-time while holding the production process stopped. Another approach is to enable diagnostic interpretation, such as Microsoft's iDNA. All of these current approaches have drawbacks.
Tracing requires modifying the code if the existing tracing is not sufficient. Such modifications require rebuilding and redeploying the application. For tracing, only the data that the developer actually adds to the trace is visible. Because tracing runs in real time and the thread in question cannot perform real work while data is gathered, trace statements tend to be very small and gather only small bits of information.
Low impact methods, such as tracing and Intellitrace®, are very limited in the data that can be collected because the collection must happen in real-time, which can have a large impact on the target process and may reduce throughput and performance.
Interpreted models, such as Microsoft Corporation's Time Travel Tracing (iDNA), have huge performance impact, which makes them unsuitable for diagnosing problems in production environments.
It is important to non-invasively and non-disruptively collect diagnostic data. In a production environment, the diagnostic tools should have little or no impact on the production process and system. The collection of process state data using existing solutions may affect the process and system in an undesirable manner.